/**
 * 用户服务 - 处理用户信息的管理
 */

// 获取云数据库引用
const db = () => wx.cloud.database();
const userCollection = () => db().collection('myUser');

const userService = {
  /**
   * 初始化用户数据
   * @param {Object} userInfo 用户基本信息
   * @returns {Promise<Object>} 初始化后的用户信息
   */
  async initUserData(userInfo) {
    try {
      // 检查用户是否已存在
      const existUser = await userCollection().where({
        openid: userInfo.openid
      }).get();
      
      // 如果用户已存在，直接返回
      if (existUser.data && existUser.data.length > 0) {
        // 更新本地存储
        wx.setStorageSync('userInfo', existUser.data[0]);
        return existUser.data[0];
      }
      
      // 添加默认字段
      const newUser = {
        openid: userInfo.openid,
        userId: userInfo._id, // 使用openid作为userId
        nickname: userInfo.nickName || '厨房新用户',
        avatarUrl: userInfo.avatarUrl || '/imgs/chef-hat.svg',
        bio: userInfo.bio || '这个人很懒，还没有留下简介',
        createTime: db().serverDate(),
        updateTime: db().serverDate()
      };
      
      // 添加到云数据库
      const result = await userCollection().add({
        data: newUser
      });
      
      newUser._id = result._id;
      
      // 更新本地存储
      wx.setStorageSync('userInfo', newUser);
      return newUser;
    } catch (error) {
      console.error('初始化用户数据失败', error);
      throw error;
    }
  },
  
  /**
   * 获取用户信息
   * @returns {Object} 用户信息
   */
  getUserInfo() {
    return wx.getStorageSync('userInfo') || null;
  },
  
  /**
   * 更新用户信息
   * @param {Object} userInfo 更新的用户信息
   * @returns {Promise<Object>} 更新后的用户信息
   */
  async updateUserInfo(userInfo) {
    try {
      // 首先保存到本地
      wx.setStorageSync('userInfo', userInfo);
      
      // 如果有云数据库ID，则更新云端
      if (userInfo._id) {
        await userCollection().doc(userInfo._id).update({
          data: {
            nickname: userInfo.nickname,
            avatarUrl: userInfo.avatarUrl,
            bio: userInfo.bio,
            updateTime: db().serverDate()
          }
        });
      }
      
      return userInfo;
    } catch (error) {
      console.error('更新用户信息失败', error);
      throw error;
    }
  },
  
  /**
   * 获取用户设置
   * @returns {Object} 用户设置
   */
  getUserSettings() {
    const userInfo = this.getUserInfo();
    return userInfo && userInfo.settings ? userInfo.settings : {
      theme: 'theme-green',
      font: 'font-default',
      layout: 'layout-list'
    };
  },
  
  /**
   * 更新用户设置
   * @param {Object} settings 更新的设置
   * @returns {Promise<Object>} 更新后的用户设置
   */
  async updateUserSettings(settings) {
    try {
      const userInfo = this.getUserInfo();
      
      if (!userInfo) {
        throw new Error('用户未登录');
      }
      
      userInfo.settings = {
        ...userInfo.settings,
        ...settings
      };
      
      // 保存到本地
      wx.setStorageSync('userInfo', userInfo);
      
      // 如果有云数据库ID，则更新云端
      if (userInfo._id) {
        await userCollection().doc(userInfo._id).update({
          data: {
            settings: userInfo.settings,
            updateTime: db().serverDate()
          }
        });
      }
      
      // 同时更新对应的本地设置缓存
      if (settings.theme) wx.setStorageSync('theme', settings.theme);
      if (settings.font) wx.setStorageSync('font', settings.font);
      if (settings.layout) wx.setStorageSync('layout', settings.layout);
      
      return userInfo.settings;
    } catch (error) {
      console.error('更新用户设置失败', error);
      throw error;
    }
  },
  
  /**
   * 获取当前用户ID
   * @returns {String} 用户ID
   */
  getCurrentUserId() {
    const userInfo = this.getUserInfo();
    return userInfo ? userInfo.userId || userInfo.openid : null;
  }
};

module.exports = userService; 